package com.han.hotelplat.comm.utils;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.math.BigDecimal;
import java.math.BigInteger;

/**
 * 装换过程出错 是不会抛异常的,也不会返回null(除非json里面对应的是null)
 *最好使用toString()  使用getAsXX()会因为jsonNull而报异常
 *
 * 16-9-3
 * @author lkm
 */
public class JsonP {
    private JsonElement jo;//当前的json对象


    public JsonP(String json) {
        JsonElement je = new JsonParser().parse(json);
        setJo(je);
    }

    public JsonP(JsonElement je) {
        setJo(je);
    }

    private void setJo(JsonElement je) {
        jo=je;
    }

    public JsonP get(String key) {

        if (jo.isJsonObject())
            try {
                return new JsonP(((JsonObject)jo).get(key));
            } catch (Exception e) {
//				 e.printStackTrace();
            }

        return this;
    }

    /**
     * @param index
     * @return null就是溢出了.
     */
    public JsonP get(int index) {

        if (jo.isJsonArray()){
            JsonArray ja=(JsonArray) jo;
            if (index >= ja.size())
                return null;

            return new JsonP(ja.get(index));
        }

        return this;
    }

    @Override
    public String toString() {
        return  jo.toString();// super.toString();
    }


    public int getAsInt(int defaultValue) {
        if(jo.isJsonNull())return defaultValue;

        return jo.getAsInt();
    }

    public boolean getAsBoolean(boolean defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsBoolean();
    }


    public Number getAsNumber(Number defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsNumber();
    }

    public String getAsString(String defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsString();
    }

    public double getAsDouble(double defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsDouble();
    }

    public float getAsFloat(float defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsFloat();
    }

    public long getAsLong(long defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsLong();
    }

    public byte getAsByte(byte defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsByte();
    }

    public char getAsCharacter(char defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsCharacter();
    }

    public BigDecimal getAsBigDecimal(BigDecimal defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsBigDecimal();
    }

    public BigInteger getAsBigInteger(BigInteger defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsBigInteger();
    }

    public short getAsShort(short defaultValue) {
        if(jo.isJsonNull())return defaultValue;
        return jo.getAsShort();
    }
}